/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.pucp.Seguridad.Controlador;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import pe.edu.pucp.Modelo.Ciudad;
import pe.edu.pucp.Modelo.Continente;
import pe.edu.pucp.Modelo.EstadoUsuario;
import pe.edu.pucp.Modelo.Pais;
import pe.edu.pucp.Modelo.Permiso;
import pe.edu.pucp.Modelo.Usuario;
import pe.edu.pucp.Seguridad.DAO.UsuarioDAO;
import pe.edu.pucp.Seguridad.Vista.BuscarUsuarioGUI;
import pe.edu.pucp.Seguridad.Vista.UsuarioGUI;
import pe.edu.pucp.Util.Constante;
import pe.edu.pucp.Util.LogHelper;
import pe.edu.pucp.Util.ValHelper;
import sigepa.MainController;

/**
 *
 * @author jorge
 */
public class BuscarUsuarioControlador {
    private UsuarioDAO m;
    private BuscarUsuarioGUI view;
    private MainController mcont;
    private Usuario usract;
    private ArrayList<Usuario> lstUsuario;    
    private ArrayList<Ciudad> lstCiudad;
    private ArrayList<Continente> lstContinente;
    private ArrayList<Pais> lstPais;
    private ArrayList<EstadoUsuario> lstEstado;

        
    public BuscarUsuarioControlador(UsuarioDAO dao, BuscarUsuarioGUI v, Usuario user, MainController mc){
        m = dao;
        view = v;
        usract = user;
        view.mostrarPermisos(new  ArrayList<Permiso>(usract.getPerfil().getPermisos()));
        mcont=mc;
      
        llenarContinenteCombo();
        view.llenaComboPais(null);
        view.llenaComboCiudad(null);            
        llenarEstadoCombo();

        view.addELiminarListener(new eliminarListener());
        view.addActivarListener(new activarListener()); 
        view.addBuscarListener(new listarUsuarios() );
        view.addEditarListener(new editarUsuarioListener(this));
        view.addNuevoListener(new crearUsuarioListener(this));
        view.addLimpiarListener(new limpiarListener());
        view.addCambiarContinente(new cambiarLstPais());
        view.addCambiarPais(new cambiarLstCiudad());      
              
        lstUsuario = m.listarUsuario();               
        view.llenaGrilla(lstUsuario);         
    }
   
    public void updateMain(Usuario usr){
        if (usract.getIdusuario()==usr.getIdusuario()){ 
            mcont.updateUsuario(usr);
        }        
    }    
      
    private void llenarCiudadCombo(Pais pa){
        lstCiudad = m.listarCiudad(pa.getIdpais());
        view.llenaComboCiudad(lstCiudad);
    }     
    
    private void llenarContinenteCombo(){
        lstContinente = m.listarContinente();
        view.llenaComboContinente(lstContinente);
    }

    private void llenarPaisCombo(Continente cont){
        lstPais= m.listarPais(cont.getIdcontinente());
        view.llenaComboPais(lstPais);
    }    
    
    private void llenarEstadoCombo(){
        lstEstado = m.listarEstado();
        view.llenaComboEstado(lstEstado);
    }      

    public void listarResultados(){
        lstUsuario = m.listarUsuario();               
        view.llenaGrilla(lstUsuario);        
    }
    

    
    class listarUsuarios implements ActionListener
    {
        @Override
        public void actionPerformed(ActionEvent e) {
            int cont = view.getContinente()<0? -1: lstContinente.get(view.getContinente()).getIdcontinente();
            int pais = view.getPais()<0? -1: lstPais.get(view.getPais()).getIdpais();
            int ciud = view.getCiudad()<0? -1: lstCiudad.get(view.getCiudad()).getIdciudad();            
            int estd = view.getEstado()<0? -1: lstEstado.get(view.getEstado()).getIdestado();                        
            lstUsuario = m.listarUsuario(view.getNombre(),cont,pais,ciud,estd);            
            view.llenaGrilla(lstUsuario);  
        }
    }
        
    class crearUsuarioListener implements ActionListener {
        
        private BuscarUsuarioControlador buc;
        public crearUsuarioListener(BuscarUsuarioControlador buscarusr){
            buc=buscarusr;
        }
                
        @Override
        public void actionPerformed(ActionEvent e) {
            UsuarioGUI p = new UsuarioGUI(view.getPadre(), true);
            UsuarioControlador c = new UsuarioControlador (m,p,buc,null,usract);
            p.setVisible(true);
        }
    
    }    
    
    class editarUsuarioListener implements ActionListener {
        
        private BuscarUsuarioControlador buc;
        public editarUsuarioListener(BuscarUsuarioControlador buscarusr){
            buc=buscarusr;
        }
        @Override
        public void actionPerformed(ActionEvent e) {            
            int sel=view.getFilaSel();
            if (sel!=-1){
                UsuarioGUI p = new UsuarioGUI(view.getPadre(), true);
                Usuario u = lstUsuario.get(sel);                
                UsuarioControlador c = new UsuarioControlador (m,p,buc,u,usract);
                p.setVisible(true);                
            }
            else{
             ValHelper.mostrarError("Debe seleccionar un usuario");   
            }              
        }
    
    } 
        
    class limpiarListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            view.LimpiarDatos();
            listarResultados();
        }        
    }    
    
    class cambiarLstPais implements ItemListener{
        @Override
        public void itemStateChanged(ItemEvent e) {
            if (e.getStateChange()== ItemEvent.SELECTED ){
                if (view.getContinente()>=0){ llenarPaisCombo(lstContinente.get(view.getContinente())); }
                else{ view.llenaComboPais(null); }                    
            }               
        }                        
    }  
    
    class cambiarLstCiudad implements ItemListener{
        @Override
        public void itemStateChanged(ItemEvent e) {            
            if (e.getStateChange()== ItemEvent.SELECTED){
                if (view.getPais()>=0){ llenarCiudadCombo(lstPais.get(view.getPais())); }
                else { view.llenaComboCiudad(null); }
            }
        }        
    }            
    
    class eliminarListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            int sel=view.getFilaSel();
            if (sel!=-1){
                if (ValHelper.solicitarConfirmacion("¿Desea inactivar este usuario?")==0){
                    Usuario u = lstUsuario.get(sel);
                    EstadoUsuario est = m.buscarEstado(Constante.ESTADO_USUARIO_INACTIVO); 
                    u.setEstadoUsuario(est);
                    m.modificarUsuario(u);
                    LogHelper.registrarOperacion(usract, Constante.ACCION_INACTIVAR, Constante.OBJETO_USUARIO, "Se inactivó el usuario "+u.getNombusr());
                    ValHelper.mostrarAviso("Se inactivó el usuario con éxito");
                    listarResultados();
                }
            }
            else{
                ValHelper.mostrarError("Debe seleccionar un usuario");
            }
        }        
    }       
    
    class activarListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            int sel=view.getFilaSel();
            if (sel!=-1){
                if (ValHelper.solicitarConfirmacion("¿Desea reactivar este usuario?")==0){                
                    Usuario u = lstUsuario.get(sel);
                    EstadoUsuario est = m.buscarEstado(Constante.ESTADO_USUARIO_ACTIVO); 
                    u.setEstadoUsuario(est);
                    m.modificarUsuario(u);
                    LogHelper.registrarOperacion(usract, Constante.ACCION_REACTIVAR, Constante.OBJETO_USUARIO, "Se reactivó el usuario "+u.getNombusr());
                    ValHelper.mostrarAviso("Se reactivó el usuario con éxito");
                    listarResultados();
                }
            }
            else{
             ValHelper.mostrarError("Debe seleccionar un usuario");   
            }               
        }        
    }       
}
